<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  
  <script>
    // 逻辑运算符
    // 1. 逻辑与(&&) - and
    // 逻辑与(&&)操作可以应用于任何类型的操作数，逻辑与操作属于短路操作，即如果第一个操作数能够决定结果，那么就不会再对第二个操作数求值。
    // 最终输出的值不一定是布尔值
    // 第一步，先将操作数转成布尔值
    // 第二步，遇到布尔值为真的时候，直接输出右边的值，遇到布尔值为假的时候，直接输出假的值,短路运算

    // 对于数字来说 非0即真
    // 对于字符串来说，非空即真
    // undefined和null强制转成布尔值，都是false

    // console.log(3 && 4); // 4
    // console.log(0 && ergregerg); // 0
    // console.log("" && 5); // ""
    // console.log(" " && 5); // 5
    // console.log(3 && 4 && 5); // 5
    // console.log(false && 5); // false
    // console.log(3 && false && abc); // false




    // 2. 逻辑或(||) - or
    // 逻辑或(||)和逻辑与操作相似，逻辑或操作符也是短路操作符，也就是说，如果第一个操作数的求值结果为true ，就不会对第二个操作数求值了。
    // console.log(false || 4);
    // // console.log(0 || ergregerg); // 报错，还没有定义过变量
    // console.log("" || 5); // 5
    // console.log(" " || 5); // " "
    // console.log(3 || 4 || 5); // 3
    // console.log(false || 5); // 5
    // console.log(3 || false || abc); // 3





    // 3. 逻辑非(!)
    // 逻辑非操作符由一个叹号（!）表示，无论这个值是什么数据类型，逻辑非操作符首先会将它的操作数转换为一个布尔值，然后再对其求反。
    // console.log(!3); // false
    // console.log(!!3); // true  用两个!!来将做强制转换，转换成布尔值
    // console.log(!0); // true
    // console.log(!""); // true
    // console.log(!undefined); // true
    // console.log(!null); // true



  </script>
</body>
</html>